package com.user.rocketmq;


import com.common.Message.vo.SMSMessage;
import com.common.RocketMqConstant;
import com.user.util.sendSMS;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

/**
 * @program: Member_Perks_Store
 * @description: 验证码发送监听接口
 * @author: 无恙
 * @create: 2024-06-17 15:31
 **/

@Slf4j
@Component
@RocketMQMessageListener(
        topic = RocketMqConstant.SMS_TOPIC,
        consumerGroup =  RocketMqConstant.SMS_GROUP,
        selectorExpression = RocketMqConstant.SMS_TAG,
        // 指定消费者线程数，默认64，生产中请注意配置，避免过大或者过小
        consumeThreadMax = 5
)
public class RocketSMSListener extends BaseMqMessageListener<SMSMessage> implements RocketMQListener<SMSMessage> {
    @Override
    protected String consumerName() {
        return RocketMqConstant.SMS_GROUP;
    }
    // 此时这里才是最终的业务处理，代码只需要处理资源类关闭异常，其他的可以交给父类重试
    @Override
    protected void handleMessage(SMSMessage message) throws Exception {
        log.info("发送短信验证码消息：{}",message);
        //发送短信验证码
        sendSMS.sendCode(message.getPhone(),message.getCode());

    }

    @Override
    protected void overMaxRetryTimesMessage(SMSMessage message) {
        // 当超过指定重试次数消息时此处方法会被调用
        // 生产中可以进行回退或其他业务操作
    }


    @Override
    protected boolean isRetry() {
        return false;
    }

    @Override
    protected int maxRetryTimes() {
        return 5;
    }

    @Override
    protected boolean isThrowException() {
        return false;
    }

    @Override
    public void onMessage(SMSMessage baseMqMessage) {
        // 注意，此时这里没有直接处理业务，而是先委派给父类做基础操作，然后父类做完基础操作后会调用子类的实际处理类型
        super.dispatchMessage(baseMqMessage);
    }


}
